package com.example.study2.constructor;
/*
基于集合构造方法
将现有集合的所有元素复制到新ArrayList中
执行的是浅拷贝 ：只复制对象引用，不复制实际对象
对于不可变对象安全，对于可变对象需要注意共享问题*/
import java.util.ArrayList;
import java.util.List;

/**
 * 演示使用不可变对象时的安全场景
 */
public class ImmutableObjectDemo {
    public static void main(String[] args) {
        // 创建原始集合 - 使用不可变的String对象
        List<String> original = List.of("Java", "Python", "C++");

        // 基于集合创建新ArrayList - 执行浅拷贝
        // 这里只复制了String对象的引用，但由于String不可变，所以安全
        ArrayList<String> copy = new ArrayList<>(original);

        // 显示初始状态
        System.out.println("=== 初始状态 ===");
        System.out.println("原始集合: " + original);
        System.out.println("拷贝列表: " + copy);

        // 尝试"修改" - 实际上会创建新对象
        String firstElement = copy.get(0);  // 获取第一个元素
        copy.set(0, firstElement + " Modified");  // 这实际上创建了新的String对象

        System.out.println("=== 修改后 ===");
        System.out.println("原始集合: " + original);  // 原集合不受影响
        System.out.println("拷贝列表: " + copy);      // 只有拷贝列表变化
        System.out.println("✅ 安全：不可变对象防止了意外的数据共享");
    }
}